[Bug Record] — binary classification accuracy converges to 0.5


Posted by sleepingjun on 2022-08-13

本文首發於我的Medium
最近在研究寫文的平台,赫然發現這邊還能做自己的blog,而且Code很好打進文章,雖然Medium也可以,但就是一種卡卡的感覺。
近期會兩邊都發文,看看哪邊比較順,再定下來只用一邊。也可能一邊純心得,一邊純紀錄Code也說不定~
(以下正文開始XD)


記錄一下在訓練模型的時候採到的坑。

前陣子,我的模型在用測試用的Data時很正常,準確率很穩定的都97%~98%左右,但在換成論文要用的data後突然變成accuracy都只有0.5。

為此困擾了我很久我嘗試過很多方法,最後發現問題在哪的時候想穿越回去打死我自己QQ。

這個問題其實可以套用到不同的Classifier model上,當你的模型訓練的accuracy穩定維持在 1/n (分成n類),你可以參考以下方法來解決你的問題:

  1. 檢查模型架構:使用model.summary()檢查模型架構,確認模型有真學進去。(看一下最下方的total parameter,大概可以了解你的模型有沒有好好學習)
  2. 檢查數據標籤(y or label)
    • 確認你的標籤是正確的,沒有標錯
    • 確認標籤的type正確
    • 確認標籤的size正確
  3. 檢查你的訓練資料有被打散: 最好每個batch中,每種類別的資料個數要均勻分配。確認Shuffle=True。
  4. 確認input shape: 不要懷疑,就算你能跑得動,你也可能是因為資料進去的樣子不太對,比如說一維data是用一、|或 ‧ 的樣子進去模型。
  5. 降低learning rage:把learning rate降低一些,比如說原本的0.1倍。
  6. 使用提早停止訓練機制: 防止overfitting,也防止你遇到本文的問題時,浪費很多時間在那邊0.5, 0.5, 0.5.....。
    當模型正確率連續幾個epoch都沒有長進,就判斷已收斂並結束學習,tensorflow 2 有一個EarlyStopping可以拿來用,不過要注意使用,有時候誤用會有明明還沒訓練好但是提前結束的情況。或是你也可以自己手刻,手刻的好處是,你想要的全都有~

最後發現是儲存生成的data時,label存的type不對,正確的size要看起來是(1,)之類的float。

最後,一個小提醒

如果你的資料在input前有什麼特殊儀式,請把他放在你心上,每分每秒想著他QQ
比如說要把平均值平移到0之類的,
記得之後拿data要predict的時候也要注意有沒有平移到正確位置,
還原的時候也要記得平移回去~
(by predict跟紀錄結果時,突然發現沒有平移的我)

Reference

https://forums.fast.ai/t/my-dogs-vs-cats-models-always-have-0-5-accuracy-whats-wrong/1665/14


在此紀錄一下使用心得...
這裡插入檔案的圖片好慢,慢到我生無可戀,索性不放了。這裡不太適合邊寫文邊分享我的圖庫XD。
By the way, 我覺得編輯頁面裡的文字比較好看0.0


#machine learning #classification







Related Posts

Beaglebone Black 刷新 EMMC 筆記

Beaglebone Black 刷新 EMMC 筆記

React Native AppState 狀態介紹

React Native AppState 狀態介紹

Node.js Advanced Interview Questions for Experienced Professionals

Node.js Advanced Interview Questions for Experienced Professionals


Comments